package com.annotation.configure;

import com.annotation.bean.ColorFunctoryBean;
import com.annotation.bean.Person;
import com.annotation.condition.CustomerCondition;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.*;

@Configuration
public class TestConfig2 {

    /**
     * IOC容器中加入的类，默认都是单实例的。无论多少次获取，都是之前的对象
     * <p>
     * <p>
     * Scope 的取值：
     * <p>
     * <p>
     * ConfigurableBeanFactory.SCOPE_PROTOTYPE   多实例    IOC 容器启动的时候，并不会创建bean,当获取bean时候，才会取创建。
     * ConfigurableBeanFactory.SCOPE_SINGLETON   单实例    IOC 容器中启动时候，就会创建bean，获取的时候直接从IOC容器中取
     * WebApplicationContext.SCOPE_REQUEST  web请求中同一个request
     * WebApplicationContext.SCOPE_SESSION, web请求中同一个session
     * <p>
     * <p>
     * <p>
     * 懒加载(Lazy) ：
     * 单实例bean: 默认在容器启动的时候就创建bean
     * 懒加载的意思就是，单实例bean在获取bean的时候再创建,延迟加载。
     *
     * @Contation注解详解： 按照一定条件判断，满足条件才能给IOC容器创建Bean
     */

    @Bean(value = "person")
    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
    @Lazy
    public Person getPerson() {
        return new Person(23, "yht");
    }


    /**
     * @Condation注解详解
     */
    @Bean(value = "yht")
    @Conditional(value = {CustomerCondition.class})
    public Person getPerson1() {
        return new Person(28, "杨宏堂");
    }


    @Bean(value = "lili")
    @Conditional(value = {CustomerCondition.class})
    public Person getPerson2() {
        return new Person(30, "郑传利");
    }


    @Bean("colorFunctoryBean")
    public ColorFunctoryBean creatColorFunctoryBean() {
        return new ColorFunctoryBean();
    }
}

